/*!
 * \file frshm_stat.h
 *
 * \brief 数据包移位、读取操作
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 * 数据包移位、读取操作
 *
 * \version 3.0
 * \author guojq
 * \date 2016/02/22
 *
 */
#ifndef __FRSHM_STAT_H_
#define __FRSHM_STAT_H_

#include <sys/shm.h>

#define FRSHM_STAT_CHK   1

#define FRSHM_STAT_FILE    "../temp/shm_stat_file"
#define FRSEM_STAT_FILE    "../temp/sem_stat_file"

/*!
 * 初始化共享内存统计
 *
 * \param void
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_init(void);

/*!
 * 取得共享内存统计的全局变量(进程使用统计信息必须先调用此函数)
 *
 * \param void
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_get(void);

/*!
 * 新建一个共享内存池的统计信息
 *
 * \param i_shmid       (统计信息的ID)
 * \param i_semid       (进程锁ID)
 * \param i_new_shmid   (共享内存池ID)
 * \param i_pool_size   (共享内存链表总个数)
 * \param i_shm_size    (共享内存单个内存块大小)
 * \param p_i_index     (存储位置的index)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_new(int i_new_shmid, char *p_name, int i_pool_size
                 , int i_shm_size, int *p_i_index);
int frshm_stat_new2(int i_shmid, int i_semid
                 , int i_new_shmid, char *p_name, int i_pool_size
                 , int i_shm_size, int *p_i_index);

/*!
 * 统计添加信息
 *
 * \param i_shmid       (统计信息的ID)
 * \param i_semid       (进程锁ID)
 * \param i_index       (统计信息的存储位置)
 * \param i_data_len    (添加的内存大小)
 * \param i_flag_ismax  (是否为最大值的内存 1:最大值 0:非最大)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_add(int i_shmid, int i_semid, int i_index, int i_data_len, int i_flag_ismax);

/*!
 * 统计删除信息
 *
 * \param i_shmid       (统计信息的ID)
 * \param i_semid       (进程锁ID)
 * \param i_index       (统计信息的存储位置)
 * \param i_data_len    (添加的内存大小)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_sub(int i_shmid, int i_semid, int i_index, int i_data_len);

/*!
 * 删除一个内存池的统计信息
 *
 * \param i_shmid       (统计信息的ID)
 * \param i_semid       (进程锁ID)
 * \param i_index       (统计信息的存储位置)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_free(int i_shmid, int i_semid, int i_index);

/*!
 * 输出所有共享内存统计信息
 *
 * \param i_shmid       (共享内存池ID)
 * \param i_semid       (进程锁ID)
 * \param pp_out        (所有共享内存统计信息的内容)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_info(char **pp_out);
int frshm_stat_info2(int i_shmid, int i_semid, char **pp_out);

/*!
 * 退出共享内存统计 
 *
 * \param i_shmid       (共享内存池ID)
 * \param i_semid       (进程锁ID)
 *
 * \return FR_SUCC (成功)\n
 *         FR_FAIL (失败)
 *
 *
 */
int frshm_stat_exit(void);
int frshm_stat_exit2(int i_shmid, int i_semid);

//统计共享内存使用的id
extern int g_i_shm_stat_id;
//统计共享内存使用的进程锁
extern int g_i_sem_stat_id;

#endif
 